home *** CD-ROM | disk | FTP | other *** search
/ US Department of Defense…ndamentals 1.0 2004 April / US Department of Defense: Firewall & Router Fundamentals 1.0 2004 April.iso / text_only / includes / lib / List.js < prev   
Encoding:
JavaScript  |  2003-12-08  |  2.5 KB  |  137 lines

  1. /**
  2.   Requires
  3.     Iterator.js
  4.     query_string.js
  5.  
  6.   Common use:
  7.  
  8.   var list = new_list();
  9.   list_add(list, "command");
  10.   list_add(list, "session");
  11.  
  12.   for (var iterator=list_iterator(list); iterator_has_next(iterator); )
  13.   {
  14.     var value = iterator_next(iterator);
  15.     alert(value);
  16.   }
  17.   */
  18.  
  19. var DATA_TYPE = 0;
  20. var LIST_DATA = 1;
  21.  
  22. function new_list()
  23. {
  24.   var list = new Array();
  25.   list[DATA_TYPE] = "list";
  26.   list[LIST_DATA] = new Array();
  27.   return list;
  28. }
  29.  
  30. function list_add(list, value)
  31. {
  32.   if (list_assert(list, "list_add"))
  33.   {
  34.     var data = list[LIST_DATA];
  35.     data[data.length] = value;
  36.   }
  37. }
  38.  
  39. function list_get(list, index)
  40. {
  41.   if (list_assert(list, "list_get"))
  42.   {
  43.     var data = list[LIST_DATA];
  44.     return data[index];
  45.   }
  46.   return null;
  47. }
  48.  
  49. function list_set(list, index, value)
  50. {
  51.   if (list_assert(list, "list_set"))
  52.   {
  53.     var data = list[LIST_DATA];
  54.     data[index] = value;
  55.   }
  56. }
  57.  
  58. function list_remove(list, index)
  59. {
  60.   var data = list[LIST_DATA];
  61.   var new_data = new Array();
  62.   for (var x=0; x<index; x++) {
  63.     new_data[new_data.length] = data[x];
  64.   }
  65.   for (var x=index+1; x<data.length; x++) {
  66.     new_data[new_data.length] = data[x];
  67.   }
  68.   list[LIST_DATA] = new_data;
  69. }
  70.  
  71. function list_iterator(list)
  72. {
  73.   iterator = new_iterator();
  74.   iterator_add_array(iterator, list[LIST_DATA]);
  75.   return iterator;
  76. }
  77.  
  78. function list_size(list)
  79. {
  80.   return list[LIST_DATA].length;
  81. }
  82.  
  83. function list_encode(list)
  84. {
  85.   if (list_assert(list, "list_encode"))
  86.   {
  87.     var encoded_list = "";
  88.     for (var i=list_iterator(list); iterator_has_next(i); ) {
  89.       var data = iterator_next(i);
  90.       encoded_list += query_encode(data) + "&";
  91.     }
  92.     return encoded_list;
  93.   }
  94. }
  95.  
  96. function list_decode(list_string)
  97. {
  98.   var list = new_list();
  99.   var delimiter = "&";
  100.  
  101.   var start_pos = 0;
  102.   for (var pos=list_string.indexOf(delimiter); pos!=-1; pos=list_string.indexOf(delimiter, pos+delimiter.length))
  103.   {
  104.     list_add(list, query_decode(list_string.substring(start_pos, pos)));
  105.     start_pos = pos+delimiter.length;
  106.   }
  107.   return list;
  108. }
  109.  
  110. function list_assert(list, functionName)
  111. {
  112.   var bad = false;
  113.   if (list == null)
  114.   {
  115.     alert("You did not pass a list to " + functionName + " causing an error...");
  116.  
  117.     var tmp = null;
  118.     alert(tmp.length); // cause an error
  119.   }
  120.  
  121.   return !bad;
  122. }
  123.  
  124. function is_list(obj)
  125. {
  126.   if (obj != null) {
  127.     if (typeof(obj) == "object")
  128.     {
  129.       if (obj[DATA_TYPE] == "list") {
  130.         return true;
  131.       }
  132.     }
  133.   }
  134.   return false;
  135. }
  136.  
  137.